From: Florian Müllner Date: Sat, 25 Mar 2017 01:46:25 +0000 (+0100) Subject: app: Work around pkexec restriction when launching X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~64 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=053b8da89c5260351199d8c51821db1a2f91cdf4;p=gnome-shell.git app: Work around pkexec restriction when launching Unless automatic child reaping is disabled in GSpawnFlags, glib's g_spawn_* functions will reparent the spawned process to init by double-forking. Unfortunately pkexec bails out in this case[0], which means that it no longer works in .desktop files since the PID tracking removal in commit 01c6392c1373. Fix this by going back to manual child reaping. [0] https://cgit.freedesktop.org/polkit/tree/src/programs/pkexec.c#n728 https://bugzilla.gnome.org/show_bug.cgi?id=763531 --- diff --git a/src/shell-app.c b/src/shell-app.c index b383d9ca5..335147c19 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -1196,6 +1196,14 @@ app_child_setup (gpointer user_data) } #endif +static void +wait_pid (GDesktopAppInfo *appinfo, + GPid pid, + gpointer user_data) +{ + g_child_watch_add (pid, (GChildWatchFunc) g_spawn_close_pid, NULL); +} + /** * shell_app_launch: * @timestamp: Event timestamp, or 0 for current event timestamp @@ -1234,13 +1242,13 @@ shell_app_launch (ShellApp *app, ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL, context, - G_SPAWN_SEARCH_PATH, + G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD, #ifdef HAVE_SYSTEMD app_child_setup, (gpointer)shell_app_get_id (app), #else NULL, NULL, #endif - NULL, NULL, + wait_pid, NULL, error); g_object_unref (context);